const fs = require('fs').promises;
const path = require('path');
const PPTX = require('pptxgenjs');

// 初始化 PowerPoint
const pptx = new PPTX();

// 按前缀分组图片
function groupImagesByPrefix(files) {
    const groups = {};

    files.forEach(file => {
        const parts = file.split('-');
        if (parts.length === 2 && parts[1].match(/^\d\.(jpg|png|jpeg)$/)) {
            const prefix = parts[0];
            if (!groups[prefix]) {
                groups[prefix] = [];
            }
            groups[prefix].push(file);
        }
    });

    return groups;
}

// 创建带有4张图片的幻灯片
async function createSlides(imgDir, groups) {
    Object.keys(groups).forEach(prefix => {
        const slide = pptx.addSlide();
        const images = groups[prefix].sort();


        // PPT页面尺寸设置 (单位：英寸)
        const pageWidth = 10;
        const pageHeight = 5.625;

        // 每个图片区域的尺寸 (2x2网格)
        const cellWidth = pageWidth / 2;
        const cellHeight = pageHeight / 2;

        // 4个图片的位置 (左上、右上、左下、右下)
        const positions = [
            { x: 0, y: 0, w: cellWidth, h: cellHeight },
            { x: cellWidth, y: 0, w: cellWidth, h: cellHeight },
            { x: 0, y: cellHeight, w: cellWidth, h: cellHeight },
            { x: cellWidth, y: cellHeight, w: cellWidth, h: cellHeight }
        ];

        images.forEach((img, index) => {
            slide.addImage({
                path: path.join(imgDir, img),
                x: positions[index].x,
                y: positions[index].y,
                w: positions[index].w,
                h: positions[index].h
            });
        });


        // 添加红色前缀文字到右上角
        slide.addText(prefix, {
            x: 5.5,  // 右侧位置
            y: 0.2,  // 顶部位置
            w: 4,    // 宽度
            h: 0.5,  // 高度
            fontSize: 18,
            bold: true,
            color: 'FF0000',  // 红色
            align: 'right'    // 右对齐
        });
    });
}

// 主函数
async function generatePPT() {
    try {
        const imgDir = path.join(__dirname, 'img-gaoxin');
        const files = await fs.readdir(imgDir);

        const imageGroups = groupImagesByPrefix(files);
        await createSlides(imgDir, imageGroups);

        // 设置PPT页面尺寸为16:9比例
        pptx.layout = 'LAYOUT_16x9';
        await pptx.writeFile('Presentation.pptx');
        console.log('PPT 创建成功!');
    } catch (err) {
        console.error('发生错误:', err);
    }
}

// 执行主函数
generatePPT();